Spring Boot JPA Auditing

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA)
120
120

Spring Boot JPA Auditing একটি শক্তিশালী ফিচার যা আপনাকে Entity-তে স্বয়ংক্রিয়ভাবে সময়, প্রবর্তক এবং অন্যান্য নিরীক্ষণ (auditing) তথ্য সংরক্ষণ করতে সাহায্য করে। এটি ব্যবহৃত হয় যখন আপনাকে Entity-তে তথ্য পরিবর্তন করার সময় create, update টাইমস্ট্যাম্প এবং who made the changes সংরক্ষণ করতে হয়। Spring JPA Auditing ব্যবহার করলে এটি স্বয়ংক্রিয়ভাবে এই তথ্যগুলো ট্র্যাক করে।

Spring Boot JPA Auditing দুটি মূল উদ্দেশ্য পালন করে:

  1. ডেটার তৈরি (Creation) সময়ের তথ্য রাখা (যেমন createdDate, createdBy)।
  2. ডেটার আপডেট (Update) সময়ের তথ্য রাখা (যেমন lastModifiedDate, lastModifiedBy)।

Spring Boot JPA Auditing Enable করা

Spring Boot JPA Auditing এর জন্য প্রথমে আপনাকে @EnableJpaAuditing অ্যানোটেশনটি আপনার কনফিগারেশন ক্লাসে যোগ করতে হবে, যাতে Spring কনটেইনার Auditing ফিচারটি সক্রিয় করতে পারে।

১. Enable Auditing in Spring Boot Application

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class SpringBootJpaAuditingApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaAuditingApplication.class, args);
    }
}

এখানে, @EnableJpaAuditing অ্যানোটেশন ব্যবহার করে Spring JPA Auditing ফিচারটি সক্ষম করা হয়েছে।

২. Auditing Fields তৈরি করা

Spring JPA Auditing ব্যবহার করতে হলে আপনাকে Entity-এ কিছু ফিল্ড (যেমন createdDate, createdBy, lastModifiedDate, lastModifiedBy) যোগ করতে হবে, এবং আপনি সেই ফিল্ডগুলোকে @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশন ব্যবহার করে চিহ্নিত করবেন।

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private double price;

    @CreatedDate
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // Getters and Setters
}

এখানে:

  • @CreatedDate: Entity তৈরি হওয়ার সময়টি স্বয়ংক্রিয়ভাবে সন্নিবেশিত হবে।
  • @LastModifiedDate: Entity আপডেট হওয়ার সময়টি স্বয়ংক্রিয়ভাবে সন্নিবেশিত হবে।
  • @EntityListeners(AuditingEntityListener.class): এটি Spring JPA Auditing চালু করতে ব্যবহৃত হয়।

৩. AuditorAware Bean Configuration

Spring JPA Auditing-এ @CreatedBy এবং @LastModifiedBy ফিল্ডগুলোর মান স্বয়ংক্রিয়ভাবে পাওয়া যায় না, আপনাকে AuditorAware Bean কনফিগার করতে হবে। এটি আপনার অ্যাপ্লিকেশনের ব্যবহারকারীর তথ্য সংগ্রহ করে, যাতে সংশ্লিষ্ট পরিবর্তনকারী ব্যবহারকারীর নাম সঠিকভাবে ইনজেক্ট করা যায়।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {

    @Bean
    public AuditorAware<String> auditorProvider() {
        return new AuditorAwareImpl();
    }
}

এখানে, AuditorAware<String> হল একটি interface যা আপনাকে current user (অথবা auditor) প্রদান করতে সাহায্য করবে।

৪. AuditorAware Implementation

import org.springframework.data.domain.AuditorAware;
import java.util.Optional;

public class AuditorAwareImpl implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // সাধারণত, এখানে আপনি বর্তমান লগিন ব্যবহারকারীর নাম রিটার্ন করবেন।
        return Optional.of("admin");
    }
}

এখানে, AuditorAwareImpl ক্লাসটি বর্তমান ব্যবহারকারী (যেমন admin) রিটার্ন করে। প্রকৃত অ্যাপ্লিকেশনে এটি সাধারণত SecurityContext থেকে ডেটা নেবে যা বর্তমানে লগইন করা ব্যবহারকারীকে নির্দেশ করবে।


Spring JPA Auditing Field Example

এখন, যদি আপনার Product Entity-এ createdBy এবং lastModifiedBy ফিল্ডগুলি যুক্ত করতে চান, তাহলে এটি কিছুটা এভাবে হবে:

import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private double price;

    @CreatedDate
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;

    // Getters and Setters
}

এখানে:

  • @CreatedBy এবং @LastModifiedBy ফিল্ডে, AuditorAware-এর মাধ্যমে বর্তমান ব্যবহারকারীর নাম বা আইডি স্বয়ংক্রিয়ভাবে সেট হবে।

সারাংশ

Spring Boot JPA Auditing একটি শক্তিশালী ফিচার যা আপনাকে Entity গুলির ওপর audit information যেমন createdDate, createdBy, lastModifiedDate, lastModifiedBy স্বয়ংক্রিয়ভাবে সন্নিবেশ করার সুবিধা দেয়। Spring JPA Auditing ব্যবহার করার জন্য:

  1. @EnableJpaAuditing অ্যানোটেশন ব্যবহার করে auditing চালু করুন।
  2. @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশন ব্যবহার করে auditing ফিল্ডগুলো যুক্ত করুন।
  3. AuditorAware কনফিগারেশন তৈরি করুন, যা auditing তথ্য সরবরাহ করবে।

Spring JPA Auditing ব্যবহারের মাধ্যমে আপনি আপনার Entity-তে ইনস্ট্যান্স এবং ডেটা পরিবর্তনের সময়ের তথ্য ট্র্যাক করতে পারবেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে সুবিধাজনক।

Content added By

Auditing কি এবং কেন এটি প্রয়োজন?

114
114

Auditing একটি সাধারণ পদ্ধতি যা ডেটাবেসে অবজেক্টের পরিবর্তন (যেমন তৈরি, আপডেট, মুছে ফেলা) ট্র্যাক এবং রেকর্ড করার জন্য ব্যবহৃত হয়। এটি সাধারণত ডেটার ইতিহাস বা পরিবর্তনের লজ বজায় রাখার জন্য ব্যবহৃত হয় এবং সাধারণত এডমিনিস্ট্রেটিভ ট্র্যাকিং, অডিট ট্রেলস, এবং কমপ্লায়েন্স প্রয়োজনে ব্যবহৃত হয়। Spring Boot JPA তে Auditing এর মাধ্যমে আপনি আপনার Entity গুলিতে createdDate, lastModifiedDate, createdBy, এবং lastModifiedBy তথ্য সংরক্ষণ করতে পারেন, যা আপনাকে ডেটার পরিবর্তন লগ বা ইতিহাস পরিচালনা করতে সাহায্য করে।

Spring Data JPA Auditing এর মাধ্যমে আপনার Entity গুলিতে এই ধরনের মেটাডেটা ইনজেক্ট করা সহজ হয়, এবং তা সিস্টেমে স্বয়ংক্রিয়ভাবে ট্র্যাক করা হয়।


Auditing এর প্রয়োজন কেন?

Auditing প্রয়োজনীয় হতে পারে বিভিন্ন কারণে, যার মধ্যে গুরুত্বপূর্ণ কিছু কারণ হল:

  1. ডেটার ট্র্যাকিং এবং ইতিহাস রক্ষণ:
    • Auditing আপনার ডেটার পরিবর্তন ট্র্যাক করতে সহায়ক। এটি আপনার অ্যাপ্লিকেশনের প্রতিটি ডেটা পরিবর্তন লগ করতে সাহায্য করে, যেমন কোনো তথ্য কখন এবং কে আপডেট করেছে বা তৈরি করেছে। এটি নিরাপত্তা এবং কমপ্লায়েন্স অডিটের জন্য গুরুত্বপূর্ণ।
  2. ডেটার সুরক্ষা এবং কমপ্লায়েন্স:
    • অনেক ক্ষেত্রেই অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীর ডেটা পরিবর্তন বা ব্যবহারের রেকর্ড রাখা আইনগত বা নিরাপত্তা কারণে বাধ্যতামূলক। বিশেষ করে GDPR বা HIPAA এর মতো আইন ও বিধি রয়েছে যা ডেটা ট্র্যাকিংয়ের জন্য auditing এর প্রয়োজনীয়তা প্রতিষ্ঠিত করেছে।
  3. ডিবাগিং এবং ট্রাবলশ্যুটিং:
    • অ্যাপ্লিকেশনে যদি কোনো ত্রুটি বা সমস্যা ঘটে, তাহলে auditing লোগগুলি ব্যবহৃত হতে পারে ত্রুটি শনাক্ত করতে এবং সমস্যার কারণ বোঝার জন্য।
  4. ইউজার এবং অ্যাডমিনিস্ট্রেটিভ মনিটরিং:
    • auditing ব্যবহারকারীর কাজের ইতিহাস এবং তার অ্যাক্টিভিটি ট্র্যাক করার জন্য একটি গুরুত্বপূর্ণ টুল হতে পারে। এটি অ্যাডমিনিস্ট্রেটরদের সাহায্য করে অ্যাপ্লিকেশন বা সিস্টেমের ওপর নিয়ন্ত্রণ রাখতে।

Spring Boot JPA তে Auditing সেটআপ

Spring Boot JPA তে auditing চালু করার জন্য কিছু কনফিগারেশন এবং অ্যানোটেশন প্রয়োজন। এর জন্য আপনাকে Spring Data JPA এর Auditing ফিচারটি ব্যবহার করতে হবে, যা @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশনগুলির মাধ্যমে ডেটাবেসে ট্র্যাকিং করতে সহায়ক।

১. Spring Boot Auditing কনফিগারেশন

প্রথমে @EnableJpaAuditing অ্যানোটেশন ব্যবহার করে auditing কনফিগার করতে হবে।

উদাহরণ: Auditing কনফিগারেশন ক্লাস

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

এখানে @EnableJpaAuditing অ্যানোটেশন Spring Boot কে auditing সক্ষম করতে বলে।


২. Entity তে Auditing অ্যানোটেশন ব্যবহার করা

এখন, Entity ক্লাসে @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশন ব্যবহার করে auditing তথ্য সংরক্ষণ করা যাবে। @CreatedBy এবং @LastModifiedBy ব্যবহারকারী তথ্য ট্র্যাক করতে সাহায্য করে এবং @CreatedDate, @LastModifiedDate ডেটার তারিখ ও সময় সংরক্ষণ করতে ব্যবহৃত হয়।

উদাহরণ: Entity তে Auditing অ্যানোটেশন

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private double price;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // Getters and Setters
}

এখানে:

  • @CreatedDate: এই অ্যানোটেশনটি createdDate ফিল্ডে অবজেক্টটি তৈরি হওয়ার সময় স্বয়ংক্রিয়ভাবে বর্তমান তারিখ এবং সময় সংরক্ষণ করবে।
  • @LastModifiedDate: এই অ্যানোটেশনটি lastModifiedDate ফিল্ডে অবজেক্টটি যখনই পরিবর্তিত হবে, তখন সর্বশেষ পরিবর্তনের তারিখ এবং সময় সংরক্ষণ করবে।

৩. Spring Data JPA Repository ব্যবহার

Spring Data JPA-তে JpaRepository বা CrudRepository ইন্টারফেস ব্যবহৃত হয় ডেটাবেস অপারেশন করার জন্য। আপনি findAll(), save(), delete() ইত্যাদি মেথড ব্যবহার করতে পারেন এবং এগুলি auditing তথ্য স্বয়ংক্রিয়ভাবে আপডেট করবে।

উদাহরণ: JpaRepository

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // Custom query methods (if any)
}

এখানে ProductRepository হল JpaRepository ইন্টারফেসের একটি বাস্তবায়ন, যা Product Entity এর জন্য CRUD অপারেশন সম্পাদন করবে।


৪. AuditorAware কনফিগারেশন

@CreatedBy এবং @LastModifiedBy ফিল্ডগুলির জন্য, Spring আপনাকে বর্তমানে সিস্টেমে লগ ইন করা ব্যবহারকারী বা Auditor এর তথ্য সংগ্রহ করতে সহায়ক একটি AuditorAware কনফিগারেশন তৈরি করতে বলবে।

উদাহরণ: AuditorAware কনফিগারেশন

import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class AuditorAwareImpl implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // আপনি এখানে আপনার প্রয়োজন অনুসারে ব্যবহারকারী আইডি রিটার্ন করতে পারেন
        return Optional.of("admin"); // উদাহরণ হিসেবে admin ব্যবহারকারী
    }
}

এখানে, AuditorAwareImpl ক্লাস ব্যবহারকারীর নাম বা আইডি ফেরত দেবে যেটি @CreatedBy এবং @LastModifiedBy এর জন্য ব্যবহৃত হবে।


Auditing এর সুবিধা

  1. ট্র্যাকিং এবং ইতিহাস রক্ষণ: auditing ডেটাবেসে অ্যাপ্লিকেশনের সকল পরিবর্তন এবং কার্যকলাপের ইতিহাস সংরক্ষণ করে। এটি পরবর্তীতে বিশ্লেষণ এবং ডিবাগিংয়ের জন্য সহায়ক হতে পারে।
  2. সিকিউরিটি ও কমপ্লায়েন্স: আইনগত বা নিরাপত্তার কারণে অনেক ক্ষেত্রে auditing প্রয়োজন হয়, যেমন GDPR বা HIPAA-তে নির্দিষ্ট ডেটা পরিবর্তন এবং ব্যবহারকারীর কর্মকাণ্ড ট্র্যাক করতে হয়।
  3. ডেটা সুরক্ষা: auditing ব্যবহার করে আপনি জানবেন কে কখন কী পরিবর্তন করেছে, যা সিস্টেমে অননুমোদিত পরিবর্তন বা অ্যাক্সেস প্রতিরোধ করতে সাহায্য করে।
  4. ডিবাগিং: কোনো সমস্যা বা ত্রুটি ঘটলে auditing লোগগুলো আপনাকে সমস্যার মূল কারণ খুঁজে বের করতে সাহায্য করতে পারে।

উপসংহার

Auditing একটি গুরুত্বপূর্ণ ফিচার যা Spring Boot JPA-তে ডেটাবেসের পরিবর্তন ট্র্যাক করতে ব্যবহৃত হয়। @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশনগুলির মাধ্যমে সহজেই auditing তথ্য সংরক্ষণ করা যায়। এটি অ্যাপ্লিকেশন নিরাপত্তা, কমপ্লায়েন্স, এবং ডিবাগিংয়ের জন্য অপরিহার্য, এবং আপনার অ্যাপ্লিকেশনকে আরও ট্রেসেবল এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।

Content added By

@CreatedDate, @LastModifiedDate, @EntityListeners এর ব্যবহার

103
103

স্প্রিং বুট জেপিএ (Spring Boot JPA) অ্যাপ্লিকেশনে ডেটাবেসে একটি Entity-র created এবং last modified তারিখ স্বয়ংক্রিয়ভাবে ট্র্যাক করা খুবই গুরুত্বপূর্ণ হতে পারে। স্প্রিং ডেটা জেপিএ (Spring Data JPA) আপনাকে @CreatedDate, @LastModifiedDate, এবং @EntityListeners অ্যানোটেশন ব্যবহার করে এই কাজটি সহজেই করতে সাহায্য করে। এই অ্যানোটেশনগুলো Entity ক্লাসের সাথে সম্পর্কিত সময় এবং তারিখ ট্র্যাক করার জন্য ব্যবহৃত হয়, যা সাধারণত লগিং, অডিটিং, এবং অন্যান্য কাজের জন্য দরকারি হতে পারে।


১. @CreatedDate অ্যানোটেশন

@CreatedDate অ্যানোটেশনটি একটি Entity এর ফিল্ডে ব্যবহার করা হয়, যা সেই Entity তৈরি হওয়ার সময় স্বয়ংক্রিয়ভাবে তৈরি তারিখ এবং সময় পূর্ণ করবে। এটি সাধারণত audit ফিল্ড হিসেবে ব্যবহৃত হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import org.springframework.data.annotation.CreatedDate;

import java.time.LocalDateTime;

@Entity
public class Product {

    @Id
    private Long id;
    private String name;

    @CreatedDate
    private LocalDateTime createdDate;

    // getters and setters
}

এখানে, createdDate ফিল্ডে @CreatedDate অ্যানোটেশন ব্যবহার করা হয়েছে, যার মাধ্যমে স্প্রিং নিজেই Entity তৈরি হওয়ার সময় বর্তমান তারিখ এবং সময় ইনজেক্ট করবে।

কনফিগারেশন:

@CreatedDate কাজ করার জন্য, আপনার স্প্রিং কনফিগারেশনটিতে @EnableJpaAuditing অ্যানোটেশন যুক্ত করতে হবে।

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

এটি স্প্রিং কনটেক্সটে অডিটিং সক্ষম করে এবং আপনার Entity-তে @CreatedDate এবং @LastModifiedDate ফিল্ডগুলির আপডেট পরিচালনা করবে।


২. @LastModifiedDate অ্যানোটেশন

@LastModifiedDate অ্যানোটেশনটি একটি Entity-র last modified তারিখ বা সময় ট্র্যাক করতে ব্যবহৃত হয়। যখন Entity এর কোনো পরিবর্তন হয়, তখন স্প্রিং এটিকে স্বয়ংক্রিয়ভাবে আপডেট করে। এটি সাধারণত updatedDate ফিল্ডে ব্যবহার করা হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import org.springframework.data.annotation.LastModifiedDate;

import java.time.LocalDateTime;

@Entity
public class Product {

    @Id
    private Long id;
    private String name;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // getters and setters
}

এখানে, lastModifiedDate ফিল্ডে @LastModifiedDate অ্যানোটেশন ব্যবহার করা হয়েছে, যার মাধ্যমে স্প্রিং Entity আপডেট করার সময় এই ফিল্ডটি স্বয়ংক্রিয়ভাবে পরিবর্তন করবে।


৩. @EntityListeners অ্যানোটেশন

@EntityListeners অ্যানোটেশনটি Entity ক্লাসে একটি listener নির্ধারণ করতে ব্যবহৃত হয়, যা Entity এর lifecycle ইভেন্ট (যেমন @PrePersist, @PostPersist, @PreUpdate, @PostUpdate, ইত্যাদি) ট্র্যাক করতে সাহায্য করে। এই অ্যানোটেশনটি সাধারণত audit এবং entity lifecycle ইভেন্টগুলি ট্র্যাক করার জন্য ব্যবহৃত হয়।

উদাহরণ:

আপনি একটি Entity Listener তৈরি করতে পারেন, যা Entity এর তৈরি বা পরিবর্তনের সময় কিছু অডিট তথ্য সেট করবে।

Entity Listener ক্লাস:

import org.springframework.data.domain.Auditable;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Auditable {

    private LocalDateTime createdDate;
    private LocalDateTime lastModifiedDate;

    // getters and setters
}

Entity ক্লাস:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Product extends Auditable {

    @Id
    private Long id;
    private String name;

    // getters and setters
}

এখানে, Auditable ক্লাসটি @EntityListeners অ্যানোটেশন ব্যবহার করে স্প্রিং AuditingEntityListener শ্রেণীটি ব্যবহার করছে, যা createdDate এবং lastModifiedDate স্বয়ংক্রিয়ভাবে আপডেট করতে সাহায্য করে।


সারাংশ

স্প্রিং বুট জেপিএ (Spring Boot JPA)-তে @CreatedDate, @LastModifiedDate, এবং @EntityListeners অ্যানোটেশনগুলি Entity ক্লাসের জন্য audit তথ্য স্বয়ংক্রিয়ভাবে পূর্ণ করতে ব্যবহৃত হয়।

  • @CreatedDate: Entity তৈরি হওয়ার সময় createdDate ফিল্ড পূর্ণ করে।
  • @LastModifiedDate: Entity আপডেট হলে lastModifiedDate ফিল্ডটি আপডেট করে।
  • @EntityListeners: Entity এর lifecycle ইভেন্টগুলির ওপর শ্রবণ করে, যেমন তৈরি বা পরিবর্তনের সময় অডিট তথ্য পূর্ণ করা।

এগুলি ব্যবহার করে, আপনি Entity এর ট্র্যাকিং এবং অডিটিং তথ্য সহজে পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশনটির নির্ভরযোগ্যতা এবং ডেটা ম্যানেজমেন্টের জন্য গুরুত্বপূর্ণ।

Content added By

উদাহরণ সহ Auditing কনফিগারেশন

99
99

Auditing স্প্রিং বুট JPA-তে একটি কার্যকরী ফিচার, যা আপনাকে Entity ক্লাসের উপর ডেটা ম্যানিপুলেশন (যেমন, তৈরি করা, আপডেট করা, মুছে ফেলা) সম্পর্কে লগ রাখতে সহায়তা করে। Auditing আপনাকে createdDate, lastModifiedDate, createdBy, lastModifiedBy ইত্যাদি ফিল্ডগুলি স্বয়ংক্রিয়ভাবে ট্র্যাক করতে সাহায্য করে। এই ফিচারটি ব্যবহারের মাধ্যমে আপনি Entity-এর যেকোনো পরিবর্তন সম্পর্কিত মেটাডেটা সংগ্রহ করতে পারেন, যেমন: কখন এবং কিভাবে ডেটা পরিবর্তিত হয়েছে, এবং কে ডেটা পরিবর্তন করেছে।

স্প্রিং বুট JPA-তে Auditing কনফিগারেশন করতে কিছু নির্দিষ্ট ধাপ অনুসরণ করতে হয়। এটি সাধারণত @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশন ব্যবহার করে করা হয়।


স্প্রিং বুট JPA Auditing কনফিগারেশন

1. Auditing কনফিগারেশন ক্লাস তৈরি করা

স্প্রিং বুট JPA তে auditing সক্ষম করার জন্য প্রথমে একটি কনফিগারেশন ক্লাস তৈরি করতে হয়, যেখানে @EnableJpaAuditing অ্যানোটেশন ব্যবহার করা হয়।

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
    // Enable JPA Auditing
}

ব্যাখ্যা:

  • @EnableJpaAuditing: এই অ্যানোটেশনটি স্প্রিং বুটকে নির্দেশ দেয় যে এটি JPA Auditing সক্ষম করবে।

2. Entity ক্লাসে Auditing ফিল্ড যোগ করা

এখন, আপনাকে Entity ক্লাসে auditing ফিল্ড যোগ করতে হবে। এই ফিল্ডগুলো @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশন দ্বারা চিহ্নিত হবে।

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;

@Entity
@EntityListeners(AuditingEntityListener.class)  // Enable Auditing
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private Double price;

    @CreatedDate  // Automatically set the creation date
    private Date createdDate;

    @LastModifiedDate  // Automatically set the last modified date
    private Date lastModifiedDate;

    @CreatedBy  // Automatically set the creator of the entity
    private String createdBy;

    @LastModifiedBy  // Automatically set the last modifier of the entity
    private String lastModifiedBy;

    // Getters and Setters
}

ব্যাখ্যা:

  • @CreatedDate: এই ফিল্ডটি Entity তৈরির সময় স্বয়ংক্রিয়ভাবে সেট হবে।
  • @LastModifiedDate: এই ফিল্ডটি Entity আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে সেট হবে।
  • @CreatedBy: এই ফিল্ডটি Entity তৈরি করার সময় ইউজার দ্বারা স্বয়ংক্রিয়ভাবে ইনজেক্ট হবে।
  • @LastModifiedBy: এই ফিল্ডটি Entity আপডেট হওয়ার সময় ইউজার দ্বারা স্বয়ংক্রিয়ভাবে ইনজেক্ট হবে।
  • @EntityListeners(AuditingEntityListener.class): এটি Entity ক্লাসে auditing সক্রিয় করতে ব্যবহার করা হয়।

3. AuditorAware Interface ইমপ্লিমেন্ট করা

এখন, @CreatedBy এবং @LastModifiedBy ফিল্ডগুলির জন্য আপনি AuditorAware ইন্টারফেসটি ইমপ্লিমেন্ট করবেন, যাতে আপনি ট্র্যাক করতে পারেন createdBy এবং lastModifiedBy এর মান। সাধারণত, এটি লগিন ইউজারের নাম সংরক্ষণ করতে ব্যবহৃত হয়।

import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // Here you would retrieve the current logged-in user
        return Optional.of("admin");  // Placeholder for the logged-in user
    }
}

ব্যাখ্যা:

  • getCurrentAuditor() মেথডটি ইউজারের তথ্য ফেরত দেয়, যেমন ইউজারনেম। বাস্তব অ্যাপ্লিকেশনে, আপনি এখানে লগিন ইউজারের তথ্য অ্যাক্সেস করতে পারেন (যেমন, Spring Security ব্যবহার করে)।

4. Spring Security (Optional)

যদি আপনি Spring Security ব্যবহার করেন, তাহলে আপনি SecurityContextHolder থেকে লগিন করা ইউজারের নাম নিতে পারেন।

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Component;
import java.util.Optional;

@Component
public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        User principal = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return Optional.of(principal.getUsername());
    }
}

ব্যাখ্যা:
এখানে SecurityContextHolder থেকে ইউজারের নাম টেনে নেওয়া হচ্ছে, যা getCurrentAuditor() মেথডে ব্যবহার হচ্ছে।


5. Audit ফিল্ডগুলোর জন্য Getter এবং Setter

এখন, Entity ক্লাসে createdDate, lastModifiedDate, createdBy, এবং lastModifiedBy ফিল্ডগুলির জন্য Getter এবং Setter মেথড যুক্ত করতে হবে।

public Date getCreatedDate() {
    return createdDate;
}

public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}

public Date getLastModifiedDate() {
    return lastModifiedDate;
}

public void setLastModifiedDate(Date lastModifiedDate) {
    this.lastModifiedDate = lastModifiedDate;
}

public String getCreatedBy() {
    return createdBy;
}

public void setCreatedBy(String createdBy) {
    this.createdBy = createdBy;
}

public String getLastModifiedBy() {
    return lastModifiedBy;
}

public void setLastModifiedBy(String lastModifiedBy) {
    this.lastModifiedBy = lastModifiedBy;
}

6. Transaction Configuration

স্প্রিং বুট জেপিএতে ট্রানজ্যাকশন ব্যবস্থাপনা করার জন্য @Transactional অ্যানোটেশন ব্যবহার করা হয়। এতে auditing ফিল্ডগুলো স্বয়ংক্রিয়ভাবে আপডেট হয় যখন ডেটাবেসে সংশোধন করা হয়।

import org.springframework.transaction.annotation.Transactional;

@Transactional
public void saveProduct(Product product) {
    productRepository.save(product);
}

ব্যাখ্যা:
এখানে @Transactional অ্যানোটেশন ব্যবহৃত হয়েছে যাতে saveProduct মেথডে ডেটাবেসে তথ্য সংরক্ষিত করার সময় ট্রানজ্যাকশন পরিচালিত হয় এবং auditing ফিল্ডগুলোও স্বয়ংক্রিয়ভাবে আপডেট হয়।


উপসংহার

Auditing স্প্রিং বুট JPA-তে একটি শক্তিশালী ফিচার, যা Entity ক্লাসের পরিবর্তন ট্র্যাক করতে সহায়তা করে। এটি @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশন ব্যবহার করে ডেটাবেসের মধ্যে পরিবর্তনগুলির সময় এবং ইউজার সংক্রান্ত তথ্য সংরক্ষণ করে। স্প্রিং বুট JPA-তে auditing কনফিগার করার মাধ্যমে ডেটাবেসের পরিবর্তন সম্পর্কিত তথ্য অ্যাপ্লিকেশনের মেটাডেটা হিসেবে সংরক্ষণ করা সম্ভব হয়, যা পরে লগিং, ইতিহাস ট্র্যাকিং, বা অডিট রিপোর্ট তৈরিতে ব্যবহার করা যেতে পারে।

Content added By
Promotion